View Javadoc
1 /* 2 * $Header: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/io/SAXBeanWriter.java,v 1.3 2002/07/19 00:54:55 mvdb Exp $ 3 * $Revision: 1.3 $ 4 * $Date: 2002/07/19 00:54:55 $ 5 * 6 * ==================================================================== 7 * 8 * The Apache Software License, Version 1.1 9 * 10 * Copyright (c) 1999-2002 The Apache Software Foundation. All rights 11 * reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 17 * 1. Redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer. 19 * 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in 22 * the documentation and/or other materials provided with the 23 * distribution. 24 * 25 * 3. The end-user documentation included with the redistribution, if 26 * any, must include the following acknowlegement: 27 * "This product includes software developed by the 28 * Apache Software Foundation (http://www.apache.org/)." 29 * Alternately, this acknowlegement may appear in the software itself, 30 * if and wherever such third-party acknowlegements normally appear. 31 * 32 * 4. The names "The Jakarta Project", "Commons", and "Apache Software 33 * Foundation" must not be used to endorse or promote products derived 34 * from this software without prior written permission. For written 35 * permission, please contact apache@apache.org. 36 * 37 * 5. Products derived from this software may not be called "Apache" 38 * nor may "Apache" appear in their names without prior written 39 * permission of the Apache Group. 40 * 41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52 * SUCH DAMAGE. 53 * ==================================================================== 54 * 55 * This software consists of voluntary contributions made by many 56 * individuals on behalf of the Apache Software Foundation. For more 57 * information on the Apache Software Foundation, please see 58 * <http://www.apache.org/>;. 59 * 60 * $Id: SAXBeanWriter.java,v 1.3 2002/07/19 00:54:55 mvdb Exp $ 61 */ 62 package org.apache.commons.betwixt.io; 63 64 import java.beans.IntrospectionException; 65 import java.io.BufferedWriter; 66 import java.io.IOException; 67 import java.io.OutputStream; 68 import java.io.OutputStreamWriter; 69 import java.io.Writer; 70 import java.util.Iterator; 71 import java.util.HashMap; 72 73 import org.apache.commons.logging.Log; 74 import org.apache.commons.logging.LogFactory; 75 76 import org.apache.commons.betwixt.AttributeDescriptor; 77 import org.apache.commons.betwixt.ElementDescriptor; 78 import org.apache.commons.betwixt.XMLBeanInfo; 79 import org.apache.commons.betwixt.XMLIntrospector; 80 import org.apache.commons.betwixt.expression.Context; 81 import org.apache.commons.betwixt.expression.Expression; 82 import org.apache.commons.betwixt.io.id.SequentialIDGenerator; 83 84 import org.xml.sax.ContentHandler; 85 import org.xml.sax.SAXException; 86 import org.xml.sax.helpers.AttributesImpl; 87 88 // FIX ME 89 // At the moment, namespaces are NOT supported! 90 91 /*** 92 * The SAXBeanwriter will send events to a ContentHandler 93 * 94 * @author <a href="mailto:rdonkin@apache.org">Robert Burrell Donkin</a> 95 * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a> 96 * @version $Id: SAXBeanWriter.java,v 1.3 2002/07/19 00:54:55 mvdb Exp $ 97 */ 98 public class SAXBeanWriter extends AbstractBeanWriter { 99 100 /*** Where the output goes */ 101 private ContentHandler contentHandler; 102 /*** Log used for logging (Doh!) */ 103 private Log log = LogFactory.getLog( BeanWriter.class ); 104 105 private String lastElementName; 106 107 private AttributesImpl attributes; 108 109 private boolean elementWaiting = false; 110 111 /*** 112 * <p> Constructor sets writer used for output.</p> 113 * 114 * @param writer write out representations to this writer 115 */ 116 public SAXBeanWriter(ContentHandler contentHandler) { 117 this.contentHandler = contentHandler; 118 } 119 120 /*** 121 * <p> Get the current level for logging. </p> 122 * 123 * @return a <code>org.apache.commons.logging.Log</code> level constant 124 */ 125 public Log getLog() { 126 return log; 127 } 128 129 /*** 130 * <p> Set the current logging level. </p> 131 * 132 * @param level a <code>org.apache.commons.logging.Log</code> level constant 133 */ 134 public void setLog(Log log) { 135 this.log = log; 136 } 137 138 139 // Expression methods 140 //------------------------------------------------------------------------- 141 142 /*** Express an element tag start using given qualified name */ 143 protected void expressElementStart(String qualifiedName) throws SAXException { 144 // make sure any previous elements have been sent 145 sendElementStart(); 146 // ok prepare for new one 147 elementWaiting = true; 148 attributes = new AttributesImpl(); 149 lastElementName = qualifiedName; 150 } 151 152 protected void expressTagClose() { 153 // using this could probably make life easier 154 // but i only know that i needed it after i'd written the rest 155 } 156 157 /*** Express an element end tag using given qualifiedName */ 158 protected void expressElementEnd(String qualifiedName) throws SAXException { 159 // make sure that we sent the last element to be handled 160 sendElementStart(); 161 // can't handle namespaces yet 162 contentHandler.endElement("","",qualifiedName); 163 } 164 165 /*** Express an empty element end */ 166 protected void expressElementEnd() throws SAXException { 167 // last element name must be correct since there haven't been any tag in between 168 contentHandler.endElement("","",lastElementName); 169 } 170 171 /*** Express body text */ 172 protected void expressBodyText(String text) throws SAXException { 173 // FIX ME 174 // CHECK UNICODE->CHAR CONVERSION! 175 // THIS WILL QUITE POSSIBLY BREAK FOR NON-ROMAN 176 char[] body = text.toCharArray(); 177 contentHandler.characters(body, 0, body.length); 178 } 179 180 /*** Express an attribute */ 181 protected void expressAttribute( 182 String qualifiedName, 183 String value) 184 throws 185 SAXException { 186 // FIX ME 187 // SHOULD PROBABLY SUPPORT ID IDREF HERE 188 attributes.addAttribute("", "", qualifiedName, "CDATA", value); 189 } 190 191 192 // Implementation methods 193 //------------------------------------------------------------------------- 194 195 private void sendElementStart() throws SAXException { 196 if (elementWaiting) { 197 contentHandler.startElement("","",lastElementName,attributes); 198 elementWaiting = false; 199 } 200 } 201 /*** 202 * This will announce the start of the document 203 * to the contenthandler. 204 * 205 * @see org.apache.commons.betwixt.io.AbstractBeanWriter#end() 206 */ 207 208 public void start() throws SAXException { 209 contentHandler.startDocument(); 210 } 211 212 /*** 213 * This method will announce the end of the document to 214 * the contenthandler. 215 * 216 * @see org.apache.commons.betwixt.io.AbstractBeanWriter#start() 217 */ 218 public void end() throws SAXException { 219 contentHandler.endDocument(); 220 } 221 222 }

This page was automatically generated by Maven